from goods.models import GoodsChannel


def get_categories():
    # 查询所有的频道
    # GoodsChannel模型类包含对应1级分类外键和相应频道位置
    # GoodsCategory 1级到3级分类的自关联表
    # 从数据库获取数据的集合都会以查寻集(QuerySet)形式返回
    channel_list = GoodsChannel.objects.order_by('group_id').order_by("sequence")
    categories = {}
    # 遍历频道，添加分类信息
    for channel in channel_list:
        # 判断频道是否已经存在,channel.group_id是一个频道对象
        if channel.group_id not in categories:
            # 不存在该频道，则新建频道
            categories[channel.group_id] = {  # 遍历共生成11个频道
                'channels': [],  # 每个频道一级分类列表
                'sub_cats': []  # 每个频道二级分类列表
            }
        categories[channel.group_id]['channels'].append({'url': channel.url, 'name': channel.category.name})
        # categories={channel.group_id:dict1}
        # dict1={'channels': list1,'sub_cats': list2}
        # list1=[{'url': channel.url, 'name': channel.category.name},....]

        # 添加二级和三级分类
        for sub2 in channel.category.subs.all():  # 该频道所有二级分类列表
            sub2.sub_cats = sub2.subs.all()  # 该一个二级分类的所有子类结果的查询集赋值给sub2.sub_cats
            # print('sub2:', sub2, "sub2.sub_cats:", sub2.sub_cats)
            categories[channel.group_id]['sub_cats'].append(sub2)  # jinja2模板中可把每个二级分类模型类对象当成对象添加进列表
    return categories